//
//  JGCollectionViewFlowLayout.m
//  UICollectionDemo
//
//  Created by 郭军 on 2019/6/5.
//  Copyright © 2019 JG. All rights reserved.
//

#import "JGCollectionViewFlowLayout.h"

@implementation JGCollectionViewFlowLayout

- (instancetype)init {
    if (self = [super init]) {
    }
    return self;
}


/**
 * 用来做布局的初始化操作（不建议在init方法中进行布局的初始化操作）
 */
- (void)prepareLayout {
    [super prepareLayout];
    // 水平滚动
    self.scrollDirection = UICollectionViewScrollDirectionHorizontal;
    //     CGFloat margin = (self.collectionView.frame.size.width - self.itemSize.width) / 2;
    //    NSLog(@"left:%f right:%f", margin, margin);
    //    self.collectionView.contentInset = UIEdgeInsetsMake(0, margin, 0, margin);
    self.collectionView.contentInset = UIEdgeInsetsMake(0, 26, 0, 26); // 设置 collectionViewCell四周的间距
}

/**
 * 当collectionView的显示范围发生改变的时候，是否需要重新刷新布局
 * 一旦重新刷新布局，就会重新调用下面的方法：
 * 1.prepareLayout
 * 2.layoutAttributesForElementsInRect:方法
 */
- (BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds
{
    return YES;
}

/**
 * 这个方法的返回值是一个数组（数组里面存放着rect范围内所有元素的布局属性）
 * 这个方法的返回值决定了rect范围内所有元素的排布（frame）
 */
//需要在viewController中使用上ZWLineLayout这个类后才能重写这个方法！！

- (NSArray<UICollectionViewLayoutAttributes *> *)layoutAttributesForElementsInRect:(CGRect)rect {
    NSLog(@"rect.size.width:%f rect.size.height:%f", rect.size.width, rect.size.height);
    //让父类布局好样式
    NSArray *attributesArray = [super layoutAttributesForElementsInRect:rect];
    NSLog(@"attributesArray:%@", attributesArray);
    //计算出collectionView的中心的位置
    CGFloat ceterX = self.collectionView.contentOffset.x + self.collectionView.frame.size.width * 0.5;
    NSLog(@"ceterX:%f", ceterX);
    
    
    CGRect visibleRect = CGRectZero;
    visibleRect.origin = self.collectionView.contentOffset;
    visibleRect.size = self.collectionView.bounds.size;
    NSLog(@"origin.x:%f origin.y:%f  visibleRect.size width:%f height:%f",  visibleRect.origin.x, visibleRect.origin.y,  visibleRect.size.width,  visibleRect.size.height);
    for (UICollectionViewLayoutAttributes *attributes in attributesArray) {
        CGFloat ActiveDistance = 300; //垂直缩放除以系数
        CGFloat ScaleFactor = 0.20;
        CGFloat midX = CGRectGetMidX(visibleRect);
        CGFloat distance = midX - attributes.center.x;// 两个中心的距离
        CGFloat normalizedDistance = fabs(distance / ActiveDistance);
        CGFloat zoom = 1 - ScaleFactor * normalizedDistance;
        attributes.transform3D = CATransform3DMakeScale(1.0, zoom, 5.5);
        
    }

    
//    /**
//     * 1.一个cell对应一个UICollectionViewLayoutAttributes对象
//     * 2.UICollectionViewLayoutAttributes对象决定了cell的frame
//     */
//    for (UICollectionViewLayoutAttributes *attributes in attributesArray) {
//        CGFloat attributeX = attributes.center.x;
//        NSLog(@"attributeX:%f", attributeX);
//        //cell的中心点距离collectionView的中心点的距离，注意ABS()表示绝对值
//        CGFloat delta = ABS(attributeX - ceterX);
//        //设置缩放比例
//        CGFloat scale = 1.1 - delta / self.collectionView.frame.size.width;
//        NSLog(@"scale:%f", scale);
//        //设置cell滚动时候缩放的比例
//        attributes.transform = CGAffineTransformMakeScale(scale, scale);
//    }
    
    return attributesArray;
}

/**
 * 这个方法的返回值，就决定了collectionView停止滚动时的偏移量
 */
- (CGPoint)targetContentOffsetForProposedContentOffset:(CGPoint)proposedContentOffset withScrollingVelocity:(CGPoint)velocity {
    // 计算出最终显示的矩形框
    CGRect rect;
    rect.origin.y = 0;
    rect.origin.x = proposedContentOffset.x;
    rect.size = self.collectionView.frame.size;
    //获得super已经计算好的布局的属性
    NSArray *arr = [super layoutAttributesForElementsInRect:rect];
    //计算collectionView最中心点的x值
    CGFloat centerX = proposedContentOffset.x + self.collectionView.frame.size.width * 0.5;
    CGFloat minDelta = MAXFLOAT;
    for (UICollectionViewLayoutAttributes *attrs in arr)
    {
        if (ABS(minDelta) > ABS(attrs.center.x - centerX))
        {
            minDelta = attrs.center.x - centerX;
        }
    }
    proposedContentOffset.x += minDelta + 26;
    return proposedContentOffset;
}

@end
